'use strict';

const Controller = require('egg').Controller;
var RPCClient = require('@alicloud/pop-core').RPCClient;
const request = require('request');
const fs = require('fs');
const {
	v4: uuidv4
} = require('uuid');

class HomeController extends Controller {
	async index() {
		const {
			ctx
		} = this;
		
		let body=ctx.request.body;
		//event为客户端上传的参数
		var client = new RPCClient({
			accessKeyId: '',
			accessKeySecret: '',
			endpoint: 'http://nls-meta.cn-shanghai.aliyuncs.com',
			apiVersion: '2019-02-28'
		});
		var appkey = 'O5GhFo6tKyGIIOc0';
		var token = await client.request('CreateToken').then((result) => {
			return result.Token
		});

		let strUUID = uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
		strUUID = strUUID.replace(/-/g, ''); // 去掉-字符，使用空格代替

		var audioSaveFile = strUUID+'.mp3';
		var format = 'mp3';

		
		var url = 'https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts';
		/**
		 * 请求参数，以JSON格式字符串填入HTTPS POST请求的Body中。
		 */
		var task = {
			appkey: appkey,
			token: token.Id,
			text: body.text,
			format: format,
			// voice 发音人，可选，默认是xiaoyun。
			voice : body.voice,
			// volume 音量，范围是0~100，可选，默认50。
			volume : body.volume,
			// speech_rate 语速，范围是-500~500，可选，默认是0。
			speech_rate : body.speech_rate,
			// pitch_rate 语调，范围是-500~500，可选，默认是0。
			pitch_rate : body.pitch_rate
		};
		var bodyContent = JSON.stringify(task);
		console.log(bodyContent)
		/**
		 * 设置HTTPS POST请求头部。
		 */
		var httpHeaders = {
			'Content-type': 'application/json'
		}
		/**
		 * 设置HTTPS POST请求。
		 * encoding必须设置为null，HTTPS响应的Body为二进制Buffer类型。
		 */
		var options = {
			url: url,
			method: 'POST',
			headers: httpHeaders,
			body: bodyContent,
			encoding: null
		};

		const result = await ctx.curl(url, {
			// 必须指定 method
			method: 'POST',
			// 通过 contentType 告诉 HttpClient 以 JSON 格式发送
			contentType: 'json',
			data: bodyContent
		});
		if (result.headers["content-type"] != 'audio/mpeg') {
			console.log("转换失败，请稍后再试！");
		} else {
			fs.writeFileSync("app/public/mp3/"+audioSaveFile, result.data);
			ctx.body = audioSaveFile;
		}
	}
}

module.exports = HomeController;
